package RRHH_Modelo;

import Conexion.Conexion;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import java.util.Date;

public class RHH_QUINQUENIO {

    private int ID;
    private int ID_CABECERA;
    private int ID_USUARIO;
    private int DEPARTAMENTO;
    private int REGIONAL;
    private int SUCURSAL;
    private double MONTO;
    private Date FECHA_PAGO;    
    private Conexion con = null;

    public RHH_QUINQUENIO(Conexion con) {
        this.con = con;
    }

    public RHH_QUINQUENIO(int ID,int ID_CABECERA, int ID_USUARIO, double MONTO, Date FECHA_PAGO, int DEPARTAMENTO, int REGIONAL, int SUCURSAL) {
        this.ID = ID;
        this.ID_USUARIO = ID_USUARIO;
        this.MONTO = MONTO;
        this.FECHA_PAGO = FECHA_PAGO;        
        this.ID_CABECERA=ID_CABECERA;
        this.DEPARTAMENTO=DEPARTAMENTO;
        this.REGIONAL=REGIONAL;
        this.SUCURSAL=SUCURSAL;
    }

    public int Insertar() throws SQLException {
        String consulta = "insert into BROKER.RHH_QUINQUENIO (ID, ID_USUARIO, MONTO, FECHA_PAGO, ID_CABECERA, DEPARTAMENTO, REGIONAL, SUCURSAL) VALUES (" + ID + "," + ID_USUARIO + "," + MONTO + ", to_date('"+getFECHA_PAGO()+"','dd/MM/yyyy'), "+ID_CABECERA+", "+DEPARTAMENTO+", "+REGIONAL+", "+SUCURSAL+")";
        con.EjecutarSentencia(consulta);
        consulta = "select BROKER.RHH_QUINQUENIO_SEQ.currval as ID from dual";
        ResultSet rs = con.EjecutarConsulta(consulta);
        rs.next();
        return rs.getInt("ID");
    }

    public double MontoQuinquenio(int id_usuario, int mes, int ano) throws SQLException
    {
        double total =0.0;
        int mes_act=mes;
        int ano_act=ano;
        for (int i = 0; i < 3; i++) 
        {            
            RHH_PLANILLA_EMPLEADOS planilla = new RHH_PLANILLA_EMPLEADOS(con).BuscarxUSUARIO(ano_act, mes_act, id_usuario);
            if(planilla!=null)
                total+=planilla.getTOTAL_LIQUIDO_PAGABLE_IMPO();
            
            if(mes_act>1)
                mes_act--;
            else
            {
                mes_act=12;
                ano_act--;
            }            
        }                        
        return (total/3)*5;
    }
    
    public boolean Modificar() throws SQLException {
        String consulta = "update BROKER.RHH_QUINQUENIO set ID = " + ID + ",ID_USUARIO = " + ID_USUARIO + ",MONTO = " + MONTO + ",FECHA_PAGO = to_date('" + getFECHA_PAGO() + "','dd/MM/yyyy'), ID_CABECERA="+ID_CABECERA+", DEPARTAMENTO="+DEPARTAMENTO+", REGIONAL="+REGIONAL+", SUCURSAL="+SUCURSAL+" where ID =  " + getID();
        con.EjecutarSentencia(consulta);
        return true;
    }
    public boolean cambiarEstado(int estado) throws SQLException {
        String consulta = "update BROKER.RHH_QUINQUENIO set ESTADO = "+estado+" where ID = " + getID();
        con.EjecutarSentencia(consulta);
        return true;
    }

    public boolean EliminarXid() throws SQLException {
        String consulta = "delete from BROKER.RHH_QUINQUENIO where ID= " + getID();
        con.EjecutarSentencia(consulta);
        return true;
    }
    public boolean EliminarXcabecera(int id_cabecera) throws SQLException {
        String consulta = "delete from BROKER.RHH_QUINQUENIO where ID_CABECERA= " + id_cabecera;
        con.EjecutarSentencia(consulta);
        return true;
    }

    public List<RHH_QUINQUENIO> BuscarxUsuario(int id_usuario) throws SQLException {
        String consulta = "select * from BROKER.RHH_QUINQUENIO where ID_USUARIO = " + id_usuario;
        ResultSet rs = con.EjecutarConsulta(consulta);
        return Cargar(rs);
    }
    public int BuscarPagadosxUsuario(int id_usuario) throws SQLException {
        String consulta = "SELECT COUNT (RHH_QUINQUENIO.ID) as CANTIDAD\n" +
                        "  FROM BROKER.RHH_QUINQUENIO\n" +
                        " WHERE (RHH_QUINQUENIO.ESTADO = 0) AND (RHH_QUINQUENIO.ID_USUARIO = "+id_usuario+")";
        ResultSet rs = con.EjecutarConsulta(consulta);
        if(rs.next())
            return rs.getInt("CANTIDAD");
        else
            return 0;
    }
    public int CantidadQuinquenios(int id_usuario) throws SQLException {
        String consulta = "select count(*) as cantidad from BROKER.RHH_QUINQUENIO where ID_USUARIO = " + id_usuario;
        ResultSet rs = con.EjecutarConsulta(consulta);
        if(rs.next())
            return rs.getInt("cantidad");
        else
            return 0;
    }

    public List<RHH_QUINQUENIO> Todos() throws SQLException {
        String consulta = "select * from BROKER.RHH_QUINQUENIO";
        ResultSet rs = con.EjecutarConsulta(consulta);
        List<RHH_QUINQUENIO> lista = Cargar(rs);
        return lista;
    }
    public List<RHH_QUINQUENIO> TodosPendientes() throws SQLException {
        String consulta = "select * from BROKER.RHH_QUINQUENIO where ESTADO=1";
        ResultSet rs = con.EjecutarConsulta(consulta);
        List<RHH_QUINQUENIO> lista = Cargar(rs);
        return lista;
    }

    public List<RHH_QUINQUENIO> Cargar(ResultSet rs) throws SQLException {
        List<RHH_QUINQUENIO> lista = new ArrayList<RHH_QUINQUENIO>();
        while (rs.next()) {
            RHH_QUINQUENIO objeto = new RHH_QUINQUENIO(con);
            objeto.setID(rs.getInt("ID"));            
            objeto.setID_USUARIO(rs.getInt("ID_USUARIO"));
            objeto.setMONTO(rs.getDouble("MONTO"));
            objeto.setFECHA_PAGO(rs.getDate("FECHA_PAGO"));            
            objeto.setID_CABECERA(rs.getInt("ID_CABECERA"));            
            objeto.setDEPARTAMENTO(rs.getInt("DEPARTAMENTO"));            
            objeto.setREGIONAL(rs.getInt("REGIONAL"));            
            objeto.setSUCURSAL(rs.getInt("SUCURSAL"));            
            lista.add(objeto);
        }
        return lista;
    }

    public int getDEPARTAMENTO() {
        return DEPARTAMENTO;
    }

    public void setDEPARTAMENTO(int DEPARTAMENTO) {
        this.DEPARTAMENTO = DEPARTAMENTO;
    }

    public int getREGIONAL() {
        return REGIONAL;
    }

    public void setREGIONAL(int REGIONAL) {
        this.REGIONAL = REGIONAL;
    }

    public int getSUCURSAL() {
        return SUCURSAL;
    }

    public void setSUCURSAL(int SUCURSAL) {
        this.SUCURSAL = SUCURSAL;
    }   
    
    public int getID_CABECERA() {
        return ID_CABECERA;
    }

    public void setID_CABECERA(int ID_CABECERA) {
        this.ID_CABECERA = ID_CABECERA;
    }   
    
    public int getID() {
        return ID;
    }

    public void setID(int ID) {
        this.ID = ID;
    }

    public int getID_USUARIO() {
        return ID_USUARIO;
    }

    public void setID_USUARIO(int ID_USUARIO) {
        this.ID_USUARIO = ID_USUARIO;
    }

    public double getMONTO() {
        return MONTO;
    }

    public void setMONTO(double MONTO) {
        this.MONTO = MONTO;
    }

    public String getFECHA_PAGO() {
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        return sdf.format(FECHA_PAGO);
    }
    public Date getFECHA_PAGO_inDATE() {
        
        return FECHA_PAGO;
    }

    public void setFECHA_PAGO(Date FECHA_PAGO) {
        this.FECHA_PAGO = FECHA_PAGO;
    }
    
    public Conexion getCon() {
        return this.con;
    }

    public void setCon(Conexion con) {
        this.con = con;
    }
}
